Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

245
Visualizações
¿Es necesario escribir un if "portátil" (c == '\n') para procesar archivos multiplataforma?

Este pensamiento proviene de una discusión sobre un problema práctico Reemplazar varias líneas nuevas en un archivo con solo una . Ocurrió algo incorrecto al usar un terminal cygwin que se ejecuta en una máquina con Windows 8.1.

Dado que el terminador de fin de línea sería diferente, como \n , \r o \r\n , ¿es necesario escribir un "portátil" if(c=='\n') para que funcione bien en ¿Linux, Windows y OS X? ¿O la mejor práctica es simplemente convertir el archivo con comandos/herramientas?

 #include <stdio.h> int main () { FILE * pFile; int c; int n = 0; pFile=fopen ("myfile.txt","r"); if (pFile==NULL) perror ("Error opening file"); else { do { c = fgetc (pFile); if (c == '\n') n++; // will it work fine under different platform? } while (c != EOF); fclose (pFile); printf ("The file contains %d lines.\n",n); } return 0; }

Actualización1:

¿CRT siempre convertirá los finales de línea en '\ n'?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Si un archivo de entrada se abre en modo binario (el carácter 'b' en la cadena de modo), entonces es necesario preocuparse por la posible presencia de '\r' antes '\n' .

Si el archivo no se abre en modo binario (y tampoco se lee usando funciones binarias como fread() ), entonces no es necesario preocuparse por la presencia de '\r' antes '\n' porque eso se manejará antes que el su código recibe la entrada, ya sea mediante una función del sistema relevante (por ejemplo, un controlador de dispositivo que lee la entrada del disco o desde stdin ) o mediante la implementación de las funciones que usa para leer la entrada del archivo.

Si está transfiriendo archivos entre sistemas (por ejemplo, escribiendo el archivo en Linux y transfiriéndolo a un sistema Windows, donde un programa intenta leerlo), entonces tiene opciones;

  • escriba y lea el archivo en modo no binario, y realice una traducción relevante del archivo al transferirlo entre sistemas. Si usa ftp , esto se puede manejar transfiriendo el archivo usando el modo de texto en lugar del modo binario. Si el archivo se transfiere en modo binario, deberá ejecutar el archivo a través de dos2unix (si transfiere el archivo a unix) o a través de unix2dos (hacia el otro lado).
  • Realice todas sus E/S en modo binario, transfiéralos entre sistemas usando el modo binario y nunca los lea en modo no binario. Entre otras cosas, esto le da un control explícito sobre qué datos hay en el archivo.
  • Escriba su archivo en modo texto, transfiera el archivo como mejor le parezca. Luego solo lea en modo binario y, cuando su código de lectura encuentre un par \r\n , suelte el carácter '\r' .

Podría decirse que el último es el más robusto: el código de escritura puede incluir \r antes de \n caracteres, o puede que no, pero el código de lectura simplemente ignora cualquier carácter '\r' que encuentre antes de un carácter '\n' . Tal código probablemente incluso funcionará si los archivos se editan a mano (por ejemplo, con un editor de texto, que puede configurarse por separado para insertar o eliminar \r y \n ) antes de leerlos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda